package com.ccsoft.thread.service;

import java.util.concurrent.TimeUnit;

/**
 * 2021年12月10日 16:13:13 chanchaw
 * 颜色可重入锁：ReentrantLock 和 Synchronized 都是可重入的
 * 带锁的方法内部可以调用同类下的其他带锁方法
 */
public class No6ReentrantLock {
    public synchronized void method1() {
        System.out.println("do method1");
        try {
            TimeUnit.SECONDS.sleep(1);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("method1 over!");

        method2();
    }

    public synchronized void method2() {
        System.out.println("do method2!");
        try {
            TimeUnit.SECONDS.sleep(1);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("method2 voer!");
    }

    public static void main(String[] args) {
        No6ReentrantLock lock = new No6ReentrantLock();
        // lambda 表达式创建线程
//        new Thread(() -> {
//            lock.method1();
//        }).start();

        // 简写方式
        new Thread(lock::method1).start();
    }
}
